Encoding a data word for writing the encoded data word in a multi-level solid state memory

ABSTRACT

A method for encoding a data word for writing an encoded data word in N cells of a solid state memory. Each of the N cells can be programmed in one of q nominal levels. The method includes encoding the data word as a codeword of a first codeword type having q symbol values or as a codeword of a second codeword type having (q−d) symbol values, dε[1, . . . , q−1], depending on a state of the N cells.

CROSS-REFERENCE TO RELATED APPLICATION

This application is a continuation of and claims priority from U.S.application Ser. No. 13/418,423 filed on Mar. 13, 2012, which in turnclaims priority under 35 U.S.C. §119 from European Patent ApplicationNo. 11160585.3 filed Mar. 31, 2011, the entire contents of bothapplications are incorporated herein by reference.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The invention relates to a method and to an encoder for encoding a dataword for writing the encoded data word in N cells of a solid statememory. Further, the invention relates to a method and to a decoder fordecoding a codeword written in N cells of a solid state memory.

2. Description of Related Art

A solid state memory uses electronic circuitry, such as integratedcircuits, for storing data or data words rather than conventionalmagnetic or optical media like disks and tapes. Solid state storagedevices such as flash memory devices are currently revolutionizing thedata storage landscape. These devices are more rugged than conventionalstorage devices due to the absence of moving parts, and offerexceptional bandwidth, significant savings in power consumption, andrandom I/O (input/output) performance that is orders of magnitude betterthan hard disk drives (HDDs).

In some types of solid state memory, the fundamental storage unit,called the cell, can be set to only two levels for recording only binaryvalues. Other types of solid state memory have so-called multi-levelcells which can be set to q different levels, where q>2. For example,flash memory and phase change memory (PCM), two important non-volatilememory technologies, permit such multi-level recording. For instance,NOR flash memories can store four levels, i.e. two bits, per cell.Multi-level cell (MLC) NAND flash memory chips that can store four bitsof data per single flash cell using 43 nm process technology areavailable.

PCM is a non-volatile solid state memory technology that exploits areversible, thermally-assisted switching of certain chalcogenide andnon-chalcogenide compounds between certain states of differentelectrical conductivity.

PCM is a promising and advanced emerging non-volatile memory technologymainly due to its excellent features including low latency, highendurance, long retention and high scalability. PCM can be considered aprime candidate for flash replacement, embedded/hybrid memory andstorage-class memory. Key requirements for competitiveness of PCMtechnology are multi-level cell functionality, in particular for lowcost per bit; further requirements are high-speed read/write operations,in particular for high bandwidth. Multilevel functionality, i.e.,multiple bits per PCM cell, is a way to increase capacity and thereby toreduce cost.

Multi-level PCM is based on storing multiple resistance levels between alowest (SET) and a highest (RESET) resistance value. Multiple resistancelevels or simply levels correspond to partial-amorphous andpartial-crystalline phase distributions of the phase-change material ofthe PCM cell. Phase transformation, i.e., memory programming, can beenabled by Joule heating. In this regard, Joule heating can becontrolled by a programming current or voltage pulse. Storing multipleresistance levels in a PCM cell is a challenging task. Issues likeprocess variability, as well as intra-cell and inter-cell materialparameter variations can give rise to deviations of the achievedresistance levels from their intended values.

For instance, in single-step programming approaches, single write pulsesare applied in order to amorphize or crystallize a certain fraction ofthe phase change material of the PCM cell. The amplitude of theprogramming pulse is determined by the characteristic R-I programmingcurve of the PCM cell. Although, the programming curves of various cellsexhibit similar overall behavior, there are variations of the PCM cellsthat can cause variations of the programmed levels in multi-levelstorage.

In particular, the cells in a large PCM array can show some variabilityof the electrical behavior. The same write signal can not result inexactly the same state of each cell generally. As a result, when probingthe cell to read-out its state, there can be a cell-to-cell variabilityof the read-back signal, that is the inferred resistance level or anyother metric, which is indicative of the cell's state, can vary fromcell to cell.

Conventionally, this variability can be compensated by an adaptiveiterative write scheme. A cell can be considered to be correctly writtenif the read-back signal lies within a predefined range around thewritten nominal level. However, a few cells can be partially-defectiveand allow only a limited range of resistance values to be writtencorrectly. Because these partially-defective cells can not supportwriting all the nominal levels within the full resistance range of thePCM array, multilevel coding can be not possible. The range limitationin partially-defective cells can, for example, affect the highresistance values close to the reset state, or it can affect the lowresistance values close to the set state, depending on the cellcharacteristics. A coding method proposed in L. A. Lastras, et al.,“Algorithms for memories with stuck cells,” Proc. IEEE SIT 2010, Austin,June 2010, pp. 968-972 is based on linear BCH-like codes.

SUMMARY OF THE INVENTION

According to an embodiment of the invention, a method for encoding adata word for writing or recording an encoded data word in N cells of asolid state memory is suggested. Each of the N cells can be programmedto one of q nominal levels. The method includes a step of encoding thedata word as a codeword of a first codeword type having q symbol valuesor as a codeword of a second codeword type having (q−d) symbol values,dε[1, . . . , q−1], depending on a state of the N cells.

According to a second embodiment, a method for writing a data word as anencoded data word in N cells of a solid state memory by a writing schemeusing a list of partially-defective cells is suggested. Each of the Ncells has q programmable levels. If none of the N cells is listed in thelist of partially-defective cells, the data word is encoded as acodeword of a first codeword type having q symbol values and a firstwrite signal is supplied to the N cells for writing the codeword of thefirst codeword type. If at least one of the N cells is listed in thelist of partially-defective cells, the data word is encoded as acodeword of a second codeword type having (q−d) symbol values, dε[1, . .. , q−1], and a second write signal is supplied to the N cells forwriting the codeword of the second codeword type.

According to a third embodiment, A method for writing a data word as anencoded data word in N cells of a solid state memory by a writing schemeusing a list of partially-defective cells, each of the N cells having qprogrammable levels is presented. If none of the N cells is listed inthe list of partially-defective cells, encoding the data word as acodeword of a first codeword type having q symbol values and supplying afirst write signal to the N cells for writing the codeword of the firstcodeword type, and if at least one of the N cells is listed in the listof partially-defective cells, encoding the data word as a codeword of asecond codeword type having (q−d) symbol values, dε[1, . . . , q−1], andsupplying a second write signal to the N cells for writing the codewordof the second codeword type.

According to a fourth embodiment, an encoder is presented. An encoderfor encoding a data word for writing an encoded data word in N cells ofa solid state memory, each of the N cells having q programmable levels,where the encoder is configured to encode the data word as a codeword ofa first codeword type having q symbol values or as a codeword of asecond codeword type having (q−d) symbol values, dε[1, . . . , q−1], independence on a state of the N cells.

According to a fifth embodiment, a decoder for decoding a codewordwritten in N cells of a solid state memory, each of the N cells having qprogrammable levels is presented. The decoder includes a receiver whichis configured to receive a read back signal from the N cells for readingback the written codeword and a processor which is configured todetermine if the written codeword is of the second codeword type independence on the received read back signal and which is configured toprovide side information to an error correcting code in dependence on adetermined written codeword of the second codeword type.

In the following, exemplary embodiments of the present invention aredescribed with reference to the enclosed figures.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 shows an embodiment of a sequence of method steps for encoding adata word for writing the encoded data word in N cells of a solid statememory,

FIG. 2 shows an embodiment of a sequence of method steps for writing adata word as an encoded data word in N cells of a solid state memory,

FIG. 3 shows an embodiment of a sequence of method steps for decoding acodeword written into N cells of a solid state memory,

FIG. 4 shows a schematic block diagram of an embodiment of an encoderfor encoding a data word for writing the encoded data word in N cells ofa solid state memory,

FIG. 5 shows a schematic block diagram of an embodiment of a decoder fordecoding a codeword written into N cells of a solid state memory,

FIG. 6 shows a schematic block diagram of an embodiment of a two-levelencoding scheme for the modulation code Cq5N7e10,

FIG. 7 shows a schematic diagram of a data format of a two-level errorcorrecting code (ECC) for the modulation code Cq5N7e10,

FIG. 8 shows a diagram illustrating block and symbol error rateperformances of three length N=2816 RS Codes, and

FIG. 9 shows a diagram illustrating potential improvements inlevel-error rate performance.

Similar or functionally similar elements in the figures have beenallocated the same reference signs if not otherwise indicated.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

An encoding scheme is proposed that has two different modes: in thefirst mode, codewords of the first codeword type (so-called standardcodewords) are produced and, in the second mode, codewords of the secondcodeword type (so-called excess codewords) are produced. In particular,an excess codeword can be used in the case that a partially-defectivecell needs to be written. For excess codewords, only a limited range oflevels of the cell can be used.

For excess codewords, a smaller number of symbol values and, therefore,a smaller number of levels in the cell can be used. The symbol values ofexcess codewords can be selected such that critical levels in the cellswhich are difficult to write can be avoided. As mentioned above,high-resistant levels close to the reset state can be more difficult towrite, whereas other resistance levels can be written with higherreliability.

The standard codewords can be used to operate under nominal conditions.The excess codewords can be used in a case that partially-defectivecells need to be written. According to an embodiment of the inventionthe decision whether a length-N standard codeword or an excess codewordis written depends on the N cells to be written. If all N cells arenon-defective, i.e., all q levels can be written correctly, a standardlength-N codeword is used. In case of a partially-defective cell, i.e.,only (q−d) levels can be written correctly, an excess codeword is used.

It is attempted to write a standard codeword. If this fails, e.g., if inone of the N cells a nominal resistance level cannot be writtencorrectly, a corresponding excess codeword is selected and writteninstead. As a result, for the case that the solid state memory containsat least one partially-defective cell, the storage capacity of the solidstate memory is increased by using the present encoding scheme comparedto conventional encoding schemes. The increase of capacity is reachedbecause by using the present encoding scheme also partially-defectivecells can be used.

As indicated above, the solid state memory can be configured formulti-level recording. Thus, each cell of the solid state memory can beprogrammed to one of q levels (q>1), in particular resistance levels.The different levels of the cell correspond to different values of aquantity, which is representative of the cells state. As a result ofhaving different levels, the cell has a number of discrete states.

The q levels of a cell need not be equally-spaced on a linear scale interms of the physical quantity, e.g., electrical resistance, whichdefines the level thresholds. That is, the q levels can correspond torespective, unequally-spaced values of the physical quantity. Forexample, the set of levels can be represented by electrical resistancevalues on a logarithmic scale. Also, levels in the middle of the rangecan tend to be subject to more noise than levels towards the ends of therange. To address this, the middle levels can be spaced apart furtherthan other levels. Examples of multi-level solid state memories arephase change memories (PCM), NOR flash memories and NAND flash memories.

The data word can be encoded as the codeword of the first codeword type,if during the iterative write process the state of the N cells indicatesthat all N cells have been correctly written, and as the codeword of thesecond codeword type, if the state of the N cells indicates that atleast one of the N cells has been incorrectly written. In other words,the data word is encoded as the codeword of the first codeword type, ifthe state of the N cells indicates no partially-defective cell in the Ncells, and as the codeword of the second codeword type, if the state ofthe N cells indicates at least one partially-defective cell within the Ncells. In particular, the first case and the second case are mutuallyexclusive.

A partially-defective cell is a cell in which not all q levels, but only(q−d) levels can be written correctly. For example, in apartially-defective cell, higher resistance levels cannot be writtencorrectly after certain number of iterations of a write scheme.

The data word can be encoded as the codeword of the first codeword typesuch that the codeword has N components, wherein each of the Ncomponents is mapped to one of the N cells and has one of the q symbolvalues, each of the q symbol values being mapped to one of the q levelsof the mapped or corresponding cell.

The data word is encoded as the codeword of the second codeword typesuch that the codeword has N components, wherein each of the Ncomponents is mapped to one of the N cells and has one of the (q−d)symbol values, each of the (q−d) symbol values is mapped to one of the(q−d) levels of the mapped or corresponding cell.

The data word can also be encoded as the codeword of the first codewordtype, if the N components of the codeword of the first codeword type canbe written correctly in the N cells. Otherwise, the data word is encodedas the codeword of the second codeword type.

The above-mentioned embodiment can be illustrated by a writing schemehaving M iterations. For the (M−1) first times of the writing scheme, itis tried to write the codeword of the first codeword type in the N cellscorrectly. If the codeword of the first codeword type is not correctlywritten in the N cells after (M−1) writing attempts, the data word isencoded as the codeword of the second codeword type and the codeword ofthe second codeword type is written in the N cells. Other options ofwriting schemes can use a list of partially-defective cells, which isobtained from previous write/read operations. Given a list ofpartially-defective cells, one can, e.g., mark these cells as erasuresand do no further writing, or use second-type codewords.

The data word can also be encoded as the codeword of the first codewordtype, if each of the symbol values of the N components can be writtencorrectly in the respective mapped level of the respective cell of the Ncells. Otherwise, the data word is encoded as the codeword of the secondcodeword type. The encoding can be sequentially executed for a pluralityof data words.

Also, each codeword of the second codeword type has a Euclidean distanceto each codeword of the first codeword type which is greater or equal toa minimum Euclidean distance between the codewords of the first codewordtype. Thus, each excess codeword has a high Euclidean distance to eachof the standard codewords. As a result, excess codewords can be reliablydetected by the decoder.

The data word can also be encoded as a codeword of the first codewordtype by means of a translation-stable code or the data word is encodedas a codeword of the second codeword type by means of thetranslation-stable code.

In a translation-stable code, each data word in the set of all possibleinput data words is encoded as a codeword with a unique sequence ofrelative symbol values (see US 2011/0296274 A1). In particular, the Nsymbols of each codeword can be recorded in respective cells, each ofthe N cells being set to the level corresponding to the symbol valueaccording to the predetermined correspondence between symbol values andcell levels. Since each possible input data word maps to a codeword witha unique sequence of relative symbol values, each data word can berecorded as a correspondingly unique relative level sequence. Note thatit is relative, as opposed to the absolute, symbol values that arecritical, i.e. the symbol values relative to some predeterminedreference value or sequence, for example the lowest symbol value in acodeword, or zero, or an average or another predefined reference.

In the following, five examples of translation-stable codes aredescribed:

1. EXAMPLE Code Cq4N7

The Code Cq4N7 is a translation-stable code C with four symbol values(q=4) and seven components (N=7). The code has four standard initialvectors c(j), where j={1,2,3,4} (see Table 1). The set of allpermutations of the initial vector c(j) is denoted by π(c^((j))) and#π(c^((j))) denotes the cardinality of that set. Thus, there are M=2100codewords, which corresponds to a rate of 1.5766 bit/cell. The minimumsquared Euclidean distance is 2. Thus, the coding gain compared touncoded signaling is 3 dB. The subcode given by M′=2048 codewords has arate 11/7=1.5714 bit/cell. In contrast, an uncoded transmission has rate2 bit/cell, but is vulnerable to drift. There is an (excess) erasurecodeword c(5) for flagging partially-defective cells. The excesscodeword c(5) has at least a minimum squared Euclidean distance of 19towards the standard codewords and, therefore, it can be easilydistinguished from the standard codewords.

TABLE 1 c^((j)) initial vectors # Π(c^((j))) c(1) = [0 1 1 2 2 3 3] 630c(2) = [0 0 1 1 2 2 3] 630 c(3) = [0 0 0 1 2 3 3] 420 c(4) = [0 0 1 2 33 3] 420 c(5) = [0 0 0 0 0 0 0] 1

2. EXAMPLE Code Cq5N7

The Code Cq5N7 is a translation-stable code C with five symbol values(q=5) and seven components (N=7). The code has four standard initialvectors c(j), where j={1,2,3,4} (see Table 2). There are M=4410 possiblecodewords and a subcode with 4096 standard codewords, which correspondsto a rate of 12/7 bit/cell. The minimum squared Euclidean distance is 2.There is an (excess) erasure codeword c(5) for flaggingpartially-defective cells. The excess codeword c(5) has at least aminimum squared Euclidean distance of 19 towards the standard codewordsand, therefore, it can be easily distinguished from the standardcodewords.

TABLE 2 c(j) initial vectors # Π(c(j)) c(1) = [0 0 1 2 3 3 4] 1260 c(2)= [0 1 2 3 3 4 4] 1260 c(3) = [0 1 1 2 2 3 4] 1260 c(4) = [0 0 1 1 2 23] 630 c(5) = [0 0 0 0 0 0 0] 1

3. EXAMPLE Code Cq5N7e10

The Code Cq5N7e10 is a translation-stable code C with five symbol values(q=5), seven components (N=7) and 2¹⁰ excess codewords. The code has sixstandard initial vectors c(j) (see Table 3). There are M=4410 standardcodewords based on the first six initial vectors c(1) to c(6) and asubcode of 4096 of these codewords has a rate of 12/7 bit/cell. Theminimum squared Euclidean distance is 2.

There are 1050>2¹⁰ excess codewords based on the last three initialvectors c(7) to c(9) (see Table 4), which use no more than q−1=4 levels.These excess codewords do not require writing of the highest level;therefore, they can be used if a cell does not support the writing ofthe highest level. The minimum squared Euclidean distance among theexcess codewords is 2 and the minimum squared Euclidean distance betweenthe standard and excess codewords is 4.

TABLE 3 standard initial vectors # Π(c(j)) c(1) = [0 1 2 3 4 4 4] 840c(2) = [0 0 1 2 3 4 4] 1260 c(3) = [0 1 1 3 3 4 4] 630 c(4) = [0 0 1 1 13 4] 420 c(5) = [0 0 0 1 2 3 4] 840 c(6) = [0 1 3 3 3 4 4] 420

TABLE 4 excess initial vectors # Π(c(j)) c(7) = [0 1 1 2 2 3 3] 630 c(8)= [0 1 2 2 2 2 3] 210 c(9) = [0 1 1 1 2 2 3] 210

According to an embodiment, if in the writing process, there are nodifficulties in writing all q=5 levels, one uses 4096 of the standardcodewords (see Table 3). If the write process does not support thewriting of the highest level, one uses 1024 excess codewords. In thelatter case, only 10 out of the 12 user bits can be written and two bitsare erased.

During read-back, the decoder can determine what initial vector andwhich permutation of it were written. When a standard codeword isdecoded, the decoder returns a 12-bit vector. When an excess codeword isdecoded, the decoder produces a 10-bit output and an erasure flag toindicate the two missing bits. The squared minimum distance among thestandard codewords is the same as the squared minimum distance among theexcess codewords, namely 2. The minimum distance between the standardcodewords and the excess codeword is twice as large, namely 4, and,therefore, it is unlikely that an excess codeword is decoded as astandard codeword and vice versa.

4. EXAMPLE Code Cq6N8

The Code Cq6N8 is a translation-stable code C with six symbol values(q=6) and eight components (N=8). The code is given by the union of thenine permutation modulation codes π(c(j)) with initial vectors c(j),c(1) to c(9) (see Table 5). There are 67200>2¹⁶ codewords, whichcorresponds to a rate of 2 bit/cell. The code has squared minimumdistance d_(min) ²=2 prior to and after the projection onto thehyperplane orthogonal to the all-one vector [1 1 . . . 1]. Thus, thereis an asymptotic coding gain of 3 dB compared to uncoded signaling at arate of log₂ (6)=2.585. There is an erasure codeword c(10) for flaggingpartially-defective cells, which compared to d_(min) ² has a largesquared distance from the standard codewords.

TABLE 5 c(j) initial vectors # Π(c(j)) c(1) = [0 0 1 1 2 3 4 5] 10080c(2) = [0 0 1 2 3 4 5 5] 10080 c(3) = [0 1 2 2 3 3 4 5] 10080 c(4) = [01 2 3 4 4 5 5] 10080 c(5) = [0 1 1 2 3 4 4 5] 10080 c(6) = [0 0 1 2 2 34 4] 5040 c(7) = [0 1 1 2 2 3 3 4] 5040 c(8) = [0 1 1 1 2 3 4 4] 3360c(9) = [0 0 1 2 3 3 3 4] 3360 c(10) = [0 0 0 0 0 0 0 0] 1

5. EXAMPLE Code Cq6N8e13

The Code Cq6N8e13 is a translation-stable code C with six symbol values(q=6), eight components (N=8) and 2¹³ excess codewords.

The code is given by the union of the ten permutation modulation codesπ(c(j)) with initial vectors c(j) (see Table 6). It is an oversized codewith 8×10080>2¹⁶ standard codewords and 8400>2¹³ excess codewords withrestricted levels. The code has a squared minimum Euclidean distanced_(min) ²=2

The squared Euclidean distance between the regular and the excesscodewords is at least 3>d_(min) ². The first eight permutationmodulation subcodes form a code with more than 2¹⁶ codewords resultingin a rate of at least 2 bit/cell. The last two permutation modulationsubcodes do not use the highest level 5. In case of apartially-defective cell, which prevents one from writing level 5, the2¹³ excess codewords of these last two subcodes can be used to write 13of the 16 data bits. The decoder can detect the use of the sparecodewords and it can flag the three missing data bits as erasures, whichcan be corrected by an outer error-correction coding scheme.

TABLE 6 c(j) initial vectors # Π(c(j)) c(1) = [0 0 1 1 2 3 4 5] 10080c(2) = [0 0 1 2 3 3 4 5] 10080 c(3) = [0 0 1 2 3 4 5 5] 10080 c(4) = [01 2 2 3 3 4 5] 10080 c(5) = [0 1 2 2 3 4 5 5] 10080 c(6) = [0 1 2 3 4 45 5] 10080 c(7) = [0 1 1 2 2 3 4 5] 10080 c(8) = [0 1 1 2 3 4 4 5] 10080c(9) = [0 0 1 2 2 3 3 4] 5040 c(10) = [0 1 2 3 3 4 4 4] 3360

According to some implementations, the sequence of relative symbolvalues in a codeword is unique to a given data word. The relative levelsequence representing a recorded codeword is then unique for a givendata word. Thus, the information to be stored can be encoded in therelative positions of cell levels, and the absolute level positions,e.g. electrical resistance values, can not be critical. Therefore, asubstantially uniform shift in all levels, i.e. not changing the basiclevel order, caused by drift noise can not affect the detection of theread-back codeword. Thus, efficient coding and recording systems can beprovided which can be resistant to drift effects in multi-levelsolid-state memories.

According to some implementations, the encoding scheme can be such thateach of the possible input data words is encoded as a codeword with aunique sequence of symbol values relative to the lowest symbol value inthe codeword. Examples are coding schemes based on permutationmodulation variant 1 codes (see US 2011/0296274 A1). The codewordsemployed can comprise codewords of a set of one or more permutationmodulation variant 1 codes. In particular embodiments, the standardcodewords can include codewords of a single permutation modulationvariant 1 code.

According to some implementations, each codeword can include a sequenceof symbols whose values are symmetrically distributed about apredetermined reference sequence. Each possible input data word is thenencoded as a codeword with a unique sequence of symbol values relativeto the reference sequence, these relative values being symmetricallydistributed about the reference sequence. Examples are coding schemesbased on sign-change codes such as permutation modulation variant 2codes. Here, each codeword can comprise a sequence of symbols whosevalues are symmetrically distributed about an all-zero referencesequence. Other examples can include finite reflection group codingschemes. Here, each codeword comprises a sequence of symbols whosevalues are symmetrically distributed about a reference sequencecorresponding to a centre of gravity defined for the finite reflectiongroup.

According to some implementations, the translation-stable codes includea union of permutation modulation codes. Thus, each code can be given bya set of initial vectors c(j). Then, the codewords are obtained bypermuting the components of these initial vectors. When q cell levelsare supported, the components of the initial vectors can take on qdifferent values, e.g. 0, 1, 2, . . . , q−1. These q numbers are mappedone-to-one by the encoder or modulation encoder onto the q cell valuesthat are supported by the solid-state memory.

The codewords of the first codeword type, i.e. the standard codewords,are derived from the initial vectors taking on values in the full range0, 1, . . . , q−1. Furthermore, the excess codewords are derived frominitial vectors taking on values in a limited range, e.g., in 0, 1, . .. , q−2. If there is only a single excess codeword [i i . . . i], onechooses the level i to correspond to a resistance level, which can bewritten very easily and reliably, e.g., a value close to the set state.In the code examples 1 to 5 above, the excess codewords do not requirewriting the highest level. Clearly, one can impose other requirements onthe excess codewords and these requirements depend on the cellcharacteristics. E.g., one can impose not to write the smallest level orany other specific level(s), which are difficult to write.

According to some implementations, the proposed encoding scheme is alsoeffective against drift. The decoding can be based on the projectionpr(.) of the read-back (received) word y onto the hyperplane Horthogonal to the all-one vector [1 1 . . . 1] (see US 2011/0296274 A1).For a projection-based decoding scheme as in US 2011/0296274 A1, therelevant distance properties of the codewords are the distances afterthe projection pr(.) onto the hyperplane H.

The translation-stable code can include a number of initial vectorshaving N components, each of the N components having one of q symbolvalues for providing codewords of the first codeword type, in particularby permutation. Furthermore, the translation-stable code includes atleast one further initial vector having N components, each of the Ncomponents having one of (q−d) symbol values for providing codewords ofthe second codeword type, in particular by permutation.

The state of the N cells can be determined in dependence on a writescheme for writing the encoded data word in the N cells. In particular,the write scheme is an adaptive iterative write scheme.

A method for writing a data word as an encoded data word in N cells of asolid state memory by a writing scheme having M iterations is suggested.Each of the N cells can be programmed in one of q levels. In a firststep, the data word is encoded as a codeword of a first codeword typehaving q symbol values. In a second step, a first write signal issupplied to the N cells for writing the codeword of the first codewordtype in the N cells. The second step is repeated, at most (M−1) times,until the codeword of the first codeword type is correctly written inthe N cells.

If the codeword of the first codeword type has not been correctlywritten in the N cells, a third and a fourth step are performed. Inother words, if the second step has been repeated (M−1) times, but thecodeword of the first codeword type has still not been correctly writtenin the N cells, a third and a fourth step are performed.

In the third step, the data word is encoded as a codeword of a secondcodeword type having (q−d) symbol values, wherein dε[1, . . . , q−1]. Inthe fourth step, a second write signal is supplied to the N cells forwriting the codeword of the second codeword type in the N cells.

Another method for decoding a codeword written in N cells of a solidstate memory is provided. Each of the N cells can be programmed in oneof q levels. The codeword is encoded by the method for above mentionedfirst aspect or of above mentioned third aspect. In a first step, a readback signal is received from the N cells by reading back the writtencodeword. In a second step, it is determined in dependence on thereceived read back signal if the written codeword is of the secondcodeword type. In a third step, side information is provided to an errorcorrecting code in dependence on a determined written codeword of thesecond codeword type.

An encoder for encoding a data word for recording the encoded data wordin N cells of a solid state memory is suggested. Each of the N cells canbe programmed in one of q levels. The encoder is configured to encodethe data word as a codeword of a first codeword type having q symbolvalues or as a codeword of a second codeword type having (q−d) symbolvalues, dε[1, . . . , q−1], in dependence on a state of the N cells.

A decoder for decoding a codeword written in N cells of a solid statememory is suggested. Each of the N cells can be programmed in one of qlevels. The decoder has a receiver and a processor. The receiver isconfigured to receive a read back signal from the N cells for readingback the written codeword. The processor is configured to determine ifthe written codeword is of the second codeword type in dependence on thereceived read back signal. Further, the processor is configured toprovide side information to an error correcting code (ECC) in dependenceon a determined written codeword of the second codeword type.

The provided side information can provide the possibility to design amore efficient ECC in terms of code rate and/or reliability. Recall thatthe encoding scheme according to embodiments of the invention encodes kinput bits either in 2^(k) standard codewords or in a number Me ofexcess codewords. This can result in a number of benefits at the decoderside as described in the following: At read-back, the decoder ordemodulator can detect that an excess codeword has been written and itcan pass this side information to the ECC decoder. Depending on thetotal number Me of excess codewords, the information passed on to theECC decoder, can be an erasure flag together with floor(log 2(Me)) bitsof information about the written data. Thus, floor(log 2(Me)) of the kinput bits can be recovered and the remaining input bits need to beobtained from the ECC.

Without a set of excess codewords, the modulation decoder can not beable to detect if there was a partially-defective cell that has beenerroneously written and, thus, it can not pass such side information tothe decoder of the overall ECC.

Further, the side information passed to the overall ECC decoder allowsone to design more efficient codes and/or to use a given code in a morereliable fashion. In particular, in the simple case of one erasure flagand no additional recovered bits, the overall ECC can operate much morereliably than without error flags because these erasures can be countedas errors and error correction is more costly than erasure correction.If the modulation decoder passes more side information, e.g., whenfloor(log 2(Me)) is close to k, the overall ECC can be even moreefficient.

The encoder can be any encoding means. Moreover, the decoder can be anydecoding means.

The respective means, in particular the encoder and the decoder, can beimplemented in hardware or in software. If the means are implemented inhardware, it can be embodied as a device, e.g. as a computer or as aprocessor or as a part of a system, e.g. a computer system. If the meansare implemented in software it can be embodied as a computer programproduct, as a function, as a routine, as a program code or as anexecutable object.

In FIG. 1, an embodiment of a sequence of method steps for encoding adata word for writing the encoded data word in N cells of a solid statememory is depicted. Each cell of the N cells can be programmed in one ofq levels for storing data.

In step 101, the data word is encoded as a codeword of a first codewordtype having q symbol values. Codewords of the first codeword type areso-called standard codewords, because their number q of symbol values isequal to the number q of levels of the cell.

In particular, the data word is encoded as the codeword of the firstcodeword type such that the codeword has N components. Each of the Ncomponents can be mapped to one of the N cells. Further, each of the Ncomponents has one of the q symbol values, where each of the q symbolvalues is mapped to one of the q levels of the mapped cell.

In step 102, a state of the N cells is determined. The state of the Ncells can be determined in dependence on a write scheme for writing theencoded data word into the N cells. If the determined state of the Ncells indicates that all N cells have been written correctly, thewriting is complete (step 103). Otherwise, if the state of the cellindicates that not all N cells can be written correctly, the methodproceeds with step 104.

In step 104, the data word is encoded as a codeword of a second codewordtype. The codeword of the second codeword type has (q−d) symbol values,wherein dε[1, . . . , q−1]. Particularly, the data word is encoded asthe codeword of the second codeword type such that the codeword has Ncomponents, wherein each of the N components is mapped to one of the Ncells and has one of the (q−d) symbol values. Each of the (q−d) symbolvalues is mapped to one of the (q−d) levels of the mapped cell.

It can be noted that each codeword of the second codeword type has aEuclidean distance to each codeword of the first codeword type that isgreater or equal to a minimum Euclidean distance between the codewordsof the first codeword type. Further, it can be noted that a codeword ofthe second codeword type is not a codeword of the first codeword type.

Moreover, for encoding a data word as a codeword of the first codewordtype or of the second codeword type, a translation-stable code can beused. The translation-stable code can include a number of initialvectors having N components, wherein each of the N components has one ofq symbol values for providing codewords of the first codeword type.Furthermore, the translation-stable code can include at least oneinitial vector having N components, each of the N components having oneof (q−d) symbol values, where 0<d<q, for providing codewords of thesecond codeword type. After step 104, the writing is complete (step105). Steps 101-105 can be sequentially executed for a plurality of datawords.

FIG. 2 shows an embodiment of a sequence of method steps for writing adata word as an encoded data word in N cells of a solid state memory bya writing scheme having M iterations. Each of the N cells has q levels,which, for example, are resistance levels. In step 201, the data word isencoded as a codeword of a first codeword type having q symbol values.

In step 202, a first write signal is supplied to the N cells for writingthe codeword of the first codeword type in the N cells. Step 202 isrepeated until the codeword of the first codeword type is correctlywritten into the N cells. According to an embodiment, a cell isconsidered to be correctly written if the read-back signal lies within apredefined range around the written nominal level. It can be noted thatstep 202 is repeated at most (M−1) times.

In step 203, it is checked if the codeword of the first codeword type iscorrectly written in the N cells after at most (M−1) times. If thecodeword of the first codeword type is correctly written in the N cellsafter (M−1) times, the writing is complete (step 204). If the codewordof the first codeword type is not correctly written in the N cells after(M−1) times, then the method proceeds with step 205. In step 205, thedata word is encoded as a codeword of a second codeword type having(q−d) symbol values, where dε[1, . . . , q−1]. In step 206, a secondwrite signal is supplied to the N cells for writing the codeword of thesecond codeword type into the N cells.

In FIG. 3, an embodiment of a sequence of method steps for decoding acodeword written into N cells of a solid-state memory is illustrated.The codeword to be decoded was exemplarily encoded by the method forFIG. 1.

In step 301, a read-back signal is received from the N cells for readingback the written codeword. In step 302, it is determined if the writtencodeword is of the second codeword type. The determining is performed independence on the received read-back signal.

In step 303, side information is provided to an error correcting code(ECC) if the result of the determining step 302 is that the writtencodeword is of the second codeword type. Further, the side informationis generated in dependence on the determined written codeword of thesecond codeword type. In particular, different written codewords of thesecond codeword type can result in different side information.

FIG. 4 shows a schematic block diagram of an embodiment of an encoder401 for encoding a data word 402 for writing the encoded data word in Ncells 403 of a solid state memory. The N cells are schematically shownby one block 403. Each of the N cells 403 can be programmed in one of qlevels for storing data.

The encoder 401 receives the data word 402 and a state 404 of the Ncells. In particular, state 404 of the N cells 403 indicates that the Ncells 403 include at least one partially-defective cell or nopartially-defective cell.

If the N cells 403 include no partially-defective cell so that all Ncells 403 can be written correctly, the encoder 401 encodes the receiveddata word 402 as a codeword 405 of a first codeword type having q symbolvalues. Otherwise, if the N cells 403 include at least onepartially-defective cell, the encoder 401 encodes the received data word402 as a codeword 406 of the second codeword type. The encoder 401provides the codeword 405 or the codeword 406 to the N cells 403.

In FIG. 5, a schematic block diagram of an embodiment of a decoder 501for decoding a codeword written into N cells 502 of a solid state memoryis shown. The codeword to be decoded is encoded by the encoder 401 ofFIG. 4 exemplarily.

The decoder 501 of FIG. 5 has a receiver 503 and a processor 504. Thereceiver 503 is configured to receive a read-back signal 505 from the Ncells 502 for reading back the written codeword from the N cells 502.The processor 504 is configured to determine if the written codeword isof the second codeword type. For this determination, the processor 504uses the read-back signal 505.

If it is determined that the written codeword is of the second codewordtype, the processor 504 generates side information 506 and provides thegenerated side information 506 to an error correcting code (ECC) 507.The processor 504 generates the side information 506 in dependence onthe read-back signal 505.

In the following, outer error correcting codes that can be used inconnection with the present encoding and decoding scheme are described.

If the error rates of the present modulation codes are too high forreliable end-to-end data protection, an overall ECC scheme can be usedto achieve the desired low error rates, e.g. in the 10⁻¹⁵ to 10⁻²⁰range. Suitable codes to reduce the error rates into these low rangesare Reed-Solomon (RS) codes over some finite Galois Field GF(2^(m)).

As described above, the present encoding or modulation scheme providesadditional side information about partially-defective cells. The benefitof this side information can not manifest itself directly at thedemodulator output, but becomes apparent by the improved performance ofthe outer ECC. The outer ECC can be appropriately designed to leveragethe side information and achieve improved performance.

If the code contains a single excess codeword, the side information canbe given by an erasure flag at the demodulator output, which indicatesif a modulation symbol, i.e., a codeword of the modulation code, waswritten onto a group of PCM cells, which contained a partially-defectivecell. For each modulation symbol, the demodulator can either pass anerasure flag or the corresponding user data symbol to the ECC decoder.The ECC decoder can apply standard error-and-erasure decoding (asdisclosed in R. E. Blahut, “Algebraic Codes for Data Transmission”,Cambridge Univ. Press, 2003) and in this way use the soft-information,that is, the erasure flag provided by the demodulator.

In the case of multiple excess codewords, the side information generatedat the decoder or demodulator, which is passed to the ECC decoder, cancarry more information than one erasure bit. This multi-bit informationcan be efficiently used by a two-level coding scheme.

In this regard, FIG. 6 shows a schematic block diagram of an embodimentof a two-level encoding scheme for the modulation code Cq5N7e10, whichoperates on 12-bit symbols. The two-level encoding scheme of FIG. 6 hasa C₀-Encoder 601, a demultiplexer (Demux) 602, a C₁-Encoder 603, amodulator 604 and a PCM array 605.

The two-level coding scheme consists of two codes, a large powerfulouter code C₀ provided by the C₀-Encoder 601 and a smaller inner codeC_(I) provided by the C₁-Encoder 603. For example, the outer code C₀ isa Reed-Solomon (RS) code with an alphabet, which is matched to thesymbol values at the modulator input, e.g., the RS-code alphabet ischosen to have the same size as the alphabet of the symbol values of themodulator. The inner code C_(I) can be chosen to be a high-rate code,which can correct a few erasures. A good choice for the inner codes canbe (extended) Hamming codes over GF(2^(s)), which can correct up to twoerasures.

The modulation code Cq5N7e10 contains 2¹² standard codewords and 2¹⁰excess codewords. The excess codewords can convey information for only10 bits of the 12-bit data symbols. The inner code C_(I) is designed toprotect the missing 2 bits and, thus, it operates on 2-bit symbols,whereas the outer code operates on 12-bit symbols. Thus, thedemultiplexer (Demux) 602 receives sequences of 12 bits from theC₀-Encoder 601 and outputs sequences of 2 bits to the C₁-Encoder 603 andsequences of 10 bits to the modulator 605 directly.

The data format for the two-level coding scheme is adjusted to thealphabet sizes of the outer and inner codes C₀, C_(I). FIG. 7 shows thedata format at the bit level for an outer code over GF(2¹²) of length N₀with P₀ parity symbols and an inner code over GF(2²) of length N_(I)with P_(I) parity symbols. The columns correspond to codeword componentsof the outer code C₀. The region, which is filled with zeros, isadjusted to the 2-bit alphabet size and P_(I) parity symbols of theinner code C_(I). Given the inner code C_(I), the outer code C₀ isdesigned to have a length N₀, which is a multiple of the length N_(I) ofthe inner code, N₀=L N_(I).

The total number of user bits is k=12 (N₀−P₀)−2 L P_(I). For themodulation code Cq5N7e10, which uses n=7 cells per modulation symbol,the overall rate of this two-level coding scheme is 12 (N₀−P₀)−2 LP_(I))/(nN₀) bit/cell.

The two-level encoder operates in two steps. First, the C₀-Encoder 601computes the P₀ parity symbols based on the user data and the Lzero-regions of the inner code. In a second step, the C_(I)-Encoder 603generates for each of the L inner codes P_(I) parity symbols andoverwrites the L zero-regions with the parity symbols.

The decoder of the two-level scheme operates in a two-stage decodingfashion: First, the inner decoder attempts to decode the erasures ineach of the L C_(I)-codewords and it fills the zero-regions with zeros.If the inner decoder is successful, it passes the corrected user data(and the zero-region) to the outer decoder. Otherwise, it passes theuncorrected user data and the zero-region together with erasure flags tothe outer decoder. In the second stage, the outer decoder applieserror-and-erasure decoding.

For large data formats of about a page of user data (=4096 bytes), onecan use long [N₀, K₀, t₀]-RS codes over GF(2¹²) of length N₀, dimensionK₀ and error correction capability t₀. By choosing the extended[N_(I)=86, K_(I)=81, d_(min)=4]-Hamming code over GF(2²) as inner code,one can correct up to 2 erasures and maintain a 1-symbol safety margin.Thus, at best one can correct 2/86=2.33% erasures per symbol on average.Examples of code parameters are given in the following Table 9.

TABLE 9 N_(l) P_(l) L N₀ = L N_(l) K D K₀ = K + D P₀ t₀ K/N₀ k [bit]RK/N₀ 86 5 33 2838 2731 28 2759 79 39 0.9623 32,778 1.65 bit/cell 86(64) 5 32.744 2816 2731 28 2759 57 28 0.9698 32,778 1.66 bit/cell

The parameter D specifies the difference between the dimension K₀ of theRS code and the number of useful user symbols K. It is given byD=floor{2×P_(I)×L/12}, where floor{t} denotes the largest integer notexceeding t. Moreover, user symbols and user bits are related byK=floor{k/12}. The parameters in the second row correspond to atwo-level scheme, which uses 32 copies of the extended Hamming code andone shortened copy of length 64. Thus, the outer code has a code lengthN₀=32×86+64=2816. Furthermore, the last column indicates the overallrate of the two-level scheme for the modulation code Cq5N7e10 with rateR=12/7 bit/cell.

In FIG. 8, a diagram illustrating block and symbol error rateperformances of three length N=2816 RS codes is depicted with errorcorrection capabilities t=28, 38, and 66. The performance is analyzedfor a channel with independent and identically distributed noise. Thetarget Bit Error Rate (BER) is 1e-20 for the two examples [2816,2628]-RS code and [2816, 2704]-RS code.

1. [2816, 2628]-RS code

Without erasure flagging, the code with minimum distance 189 cantolerate up to 2% erasure symbols per channel symbol, i.e., up to 56erasures per block, and an additional channel symbol error rate up to2e-3, as illustrated by the symbol error rate curve 804 with errorcorrection capability t=38 at the target symbol error rate of 1e-20.With erasure flagging, the code can tolerate up to 2% erasure symbolsper channel symbol, i.e., up to 56 erasures per block, and an additionalchannel symbol error rate up to 6e-3, as illustrated by the symbol errorrate curve 806 with error correction capability t=66 at the targetsymbol error rate of 1e-20.

2. [2816, 2704]-RS code

Without erasure flagging, the code with minimum distance 113 cantolerate up to 2% erasure symbols per channel symbol, i.e., up to 56erasures per block, but no additional channel errors. With erasureflagging, the code can tolerate up to 2% erasure symbols per channelsymbol, i.e., up to 56 erasures per block, and an additional channelsymbol error rate up to 1e-3, as illustrated by the symbol error ratecurve 802 with error correction capability t=28 at the target symbolerror rate of 1e-20. Further, it can be noted that similar performanceresults can be obtained for the other RS codes.

In FIG. 9, a diagram illustrating potential improvements in level-errorrate performance is shown. The x-axis of FIG. 9 shows the time and they-axis shows the level error rate. Further, curve 1201 shows erasuresand curve 1202 shows no erasures. The probability of an occurrence of anerasure symbol is 0.0025.

The codewords can be flagged as erasures at the write-head level, i.e.immediately after writing. This is very effective as this information isfreely available at writing. In the example from a PCM cell-array, just0.25% of flagged codewords can give rise to a significant improvement inperformance.

All above-mentioned embodiments of the device of the present inventioncan be embodied by respective steps to be a respective embodiment of themethod for the present invention.

What has been described herein is merely illustrative of the applicationof the principles of the present invention. Other arrangements andsystems can be implemented by those skilled in the art without departingfrom the scope and spirit of this invention.

The invention claimed is:
 1. An encoder for encoding a data word for writing an encoded data word in N cells of a solid state memory, each of the N cells having q programmable levels, wherein the encoder is configured to encode the data word as a codeword of a first codeword type having q symbol values or as a codeword of a second codeword type having (q−d) symbol values, dε[1, . . . , q−1], in dependence on a state of the N cells.
 2. A decoder for decoding a codeword written in N cells of a solid state memory, each of the N cells having q programmable levels, said codeword being encoded by an encoder; wherein said encoder is for encoding a data word for writing an encoded data word in N cells of the solid state memory, each of the N cells having q programmable levels; and wherein the encoder is configured to encode the data word as a codeword of a first codeword type having q symbol values or as a codeword of a second codeword type having (q−d) symbol values, dε[1, . . . , q−1], in dependence on a state of the N cells, the decoder comprising; a receiver which is configured to receive a read back signal from the N cells for reading back the written codeword; and a processor which is configured to determine if the written codeword is of the second codeword type in dependence on the received read back signal and which is configured to provide side information to an error correcting code in dependence on a determined written codeword of the second codeword type. 